﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Game.Klassen;
using Game;
using Game.Classes;

namespace Game
{
    public partial class controlFight : UserControl
    {
        #region Initialisieren
        //Eigenschaften
        public  Player   curPlayer;
        public  Player   Player1;
        public  Player   Player2;
        public  Player   Winner;
        public  int         valP1;
        public  int         valP2;

        private Control     holder;
        private int         curIndex = 0;
        private List<int>   numbers = new List<int>() { 100, 600, 300, 400, 200, 500 };
        private List<Image> pictures = new List<Image>();

        //Konstruktor
        public controlFight(Player p1, Player p2, Control holder)
        {
            InitializeComponent();

            //Spieler init
            this.Player1 = p1;
            this.Player2 = p2;
            this.holder = holder;

            valP1 = 0;
            valP2 = 0;

            curPlayer               = Player1;
            curPlayer.enabled       = false;
            curPlayer.alreadyFought = true;

            //Labels init
            lblPlayer.Text  = curPlayer.name;
            lblP1.Text      = Player1.name;
            lblP2.Text      = Player2.name;

            //Bilder Init
            Image mainImage = Game.Properties.Resources.rad;
            for(int x = 0; x < 6; x++)
                pictures.Add(Tools.cropImage(new Rectangle(x*450, 0, 450, 450), mainImage));

            //Load Fonts
            Session.loadFont();

            lblP1.Font = Session.smallFont;
            lblP1V.Font = Session.smallFont;
            lblP2.Font = Session.smallFont;
            lblP2V.Font = Session.smallFont;

            lblPlayer.Font = Session.bigFont;
            lblValue.Font = Session.bigFont;

            btStop.Font = Session.buttonFont;
        }
        #endregion

        //Zahlenwechsel
        private void tickerFight_Tick(object sender, EventArgs e)
        {
            //Counter erhöhen bzw. reset
            if (curIndex + 1 < numbers.Count)
                curIndex++;
            else
                curIndex = 0;

            //Label Updaten neue Zahl anzeigen
            lblValue.Text = numbers[curIndex].ToString();
            pbWheel.Image = pictures[curIndex];
        }


        //Button
        private void btStop_Click(object sender, EventArgs e)
        {
            //Label enthält Spieler welcher am Zug ist
            lblPlayer.Text = curPlayer.name;

            if (tickerFight.Enabled)
            {
                //Zahlenwechsel anhalten
                tickerFight.Enabled = false;

                //Wenn Spieler 1 am zug ist...
                if (curPlayer == Player1)
                {
                    //...aktuellen Wert für Spieler 1 speichern
                    valP1       = numbers[curIndex];

                    //Spieler 2 ist nun am Zug
                    curPlayer   = Player2;
                    btStop.Text = Player2.name;
                }

                //Wenn Spieler 2 am zug ist...
                else
                {
                    //...aktuellen Wert für Spieler 2 speichern
                    valP2 = numbers[curIndex];

                    //Falls der Angreifer eine höher Zahl trifft wird er zum Gewinner
                    if (valP1 > valP2)
                    {
                        lblP1V.ForeColor    = Color.DarkGreen;
                        Winner              = Player1;
                    }

                    //bei niedrigerer Zahl oder unentschieden ist der Verteidigende der gewinner
                    else
                    {
                        lblP2V.ForeColor    = Color.DarkGreen;
                        Winner              = Player2;
                    }

                    //Button zeigt gewinner an
                    btStop.Text         = Winner.name + " gewinnt!";
                    btStop.ForeColor    = Color.DarkRed;
                }

                //Labelanzeige der getroffenen Zahlen updaten
                lblP1V.Text = valP1.ToString();
                lblP2V.Text = valP2.ToString();
            }
            else
            {

                //Buttontext auf Stop setzen und Zahlenwechsel wieder einschalten
                if (curPlayer == Player2 && Winner == null)
                {
                    btStop.Text = "Stop";
                    tickerFight.Enabled = true;
                }

                //Gewinner steht fest
                if (Winner != null)
                {
                    //Spielersteuerung wieder einschalten
                    Player1.enabled = true;
                    Player2.enabled = true;

                    //Kampfpanel unsichtbar schalten
                    holder.Visible = false;

                    //Konsequenzen für den verlierer auslösen
                    if (Winner == Player1)
                        Player2.loseFight();
                    else
                        Player1.loseFight();

                    //Spiel wieder fokussieren für Steuerung
                    holder.Parent.Focus();

                    //Spielersteuerung wieder einschalten
                    Player1.enabled = true;
                    Player2.enabled = true;

                    //Dieses control zerstören
                    this.Dispose();
                }
            }
        }
    }
}
